//为什么需要类
// let person= {name:'luojinsheng',age:20}
// let dog= {name:'dog',age:6}
// console.log(person);
// console.log(dog);  //使用Object创建对象，无法区分出不同类型的对象 并且不方便批量创建


//类的声明 class关键字
// class Person{
//     constructor(name,age){
//         this.name=name;
//         this.age=age;
//     }
//     sayHello(){
//         console.log(`hello,${this.name}`);
//     }
// }
//
// let person1=new Person('luojinsheng',20);
// let person2=new Person('xiaoming',18);
// console.log(person1);
// console.log(person2);
// console.log(person1 instanceof Person)  //可以使用instanceof来检查一个对象是否是由某个类创建
// person1.sayHello();
// person2.sayHello();
//
//
//
// //类的继承
// class Animal{
//     constructor(name){
//         this.name=name;
//     }
// }
// let dog = new Animal('dog')


//实例属性和静态属性
// class Person{
//     name;   //实例属性是跟着实例(对象)走的
//     static flag;   //静态属性是跟着类走的
//
//     //实例方法：通过实例(对象)来调用，this指的是当前实例
//     // test =function () {
//     //     console.log('test')
//     // }
//
//     test() {
//         console.log('test',this)
//     }
//
//     //静态方法(类方法)：通过类来调用，this指的是当前类
//     static test_2(){
//         console.log('test_2',this)
//     }
//
// }
// Person.flag = 'xxx'
// console.log(Person)
// console.log(Person.flag)
//
// let person1=new Person();
// person1.name = 'luojinsheng'
// console.log(person1);
// console.log(person1.name);
//
// let person2=new Person();
// person2.name = 'xiaoming'
// console.log(person2);
// console.log(person2.name);
// person2.test()  //test Person { name: 'xiaoming' }
//
// Person.test_2()  //test_2 [class Person] { flag: 'xxx' }


//构造函数 constructor
class Person {
    //这些属性可以直接省略 全部写到constructor()里面
    name;
    age = 20
    static flag = 'xxx'

    constructor(name, age) {  //构造函数是没有返回值的！！
        this.name = name;  //this是指创建出的对象
        this.age = age;
    }

}

let person1 = new Person('luojinsheng', 20);
let person2 = new Person('xiaoming', 18);
console.log(person1);
console.log(person2);







